package com.example.zqr.service;
import com.example.zqr.dto.ProductDto;
import com.example.zqr.pojo.Product;

import java.util.List;

public interface ProductService {
    /**
     * 获取所有产品的列表。
     *
     * @return 包含所有产品的列表。
     */
    List<Product> listAll();

    /**
     * 获取所有产品的数据传输对象（DTO）列表。
     *
     * @return 包含所有产品DTO的列表。
     */
    List<ProductDto> listAllDto();

    /**
     * 创建一个新的产品。
     *
     * @param product 要创建的产品。
     * @return 影响的记录数量，为1表示插入成功。
     */
    int create(Product product);

    /**
     * 根据产品ID更新产品信息。
     *
     * @param proid   产品的唯一标识符。
     * @param product 包含更新信息的产品。
     * @return 影响的记录数量，为1表示更新成功。
     */
    int update(String proid, Product product);

    /**
     * 根据产品ID删除产品。
     *
     * @param proid 产品的唯一标识符。
     * @return 影响的记录数量，为1表示删除成功。
     */
    int delete(String proid);

    /**
     * 分页获取产品列表。
     *
     * @param pageNum  当前页码。
     * @param pageSize 每页显示的记录数。
     * @return 分页后的产品列表。
     */
    List<Product> list(int pageNum, int pageSize);

    /**
     * 分页获取产品DTO列表。
     *
     * @param pageNum  当前页码。
     * @param pageSize 每页显示的记录数。
     * @return 分页后的产品DTO列表。
     */
    List<ProductDto> listDto(int pageNum, int pageSize);

    /**
     * 根据产品ID获取产品详情。
     *
     * @param proid 产品的唯一标识符。
     * @return 对应ID的产品详情。
     */
    Product get(String proid);

    /**
     * 根据产品ID获取产品的数据传输对象（DTO）。
     *
     * @param proid 产品的唯一标识符。
     * @return 对应ID的产品DTO。
     */
    ProductDto getDto(String proid);
    /**
     * 根据关键词搜索产品，并支持分页。
     *
     * @param keyword  搜索的关键词，用于过滤产品。
     * @param pageNum  当前页码，用于分页显示。
     * @param pageSize 每页显示的产品数量，用于分页显示。
     * @return 根据关键词搜索并分页后的产品DTO列表。
     */
    List<ProductDto> searchProducts(String keyword, int pageNum, int pageSize);
    /**
     * 根据关键词计算匹配的产品数量。
     *
     * @param keyword 搜索的关键词，用于过滤产品。
     * @return 包含关键词的产品数量。
     */
    int getCount(String keyword);
}
